package cn.starrysky108.simpleerp.pub.service;

import cn.starrysky108.simpleerp.core.security.UserDetailsEntity;
import cn.starrysky108.simpleerp.pub.request.RefreshTokenRequest;
import cn.starrysky108.simpleerp.pub.request.UserRegisterRequest;
import cn.starrysky108.simpleerp.pub.response.TokenResponse;
import org.springframework.security.core.authority.SimpleGrantedAuthority;

import java.util.List;

/**
 * @author Carl Lee
 */

public interface AuthService {
    /**
     * 获取refresh_token
     *
     * @param refreshTokenRequest 旧token
     * @return TokenResponse
     */
    TokenResponse getToken(RefreshTokenRequest refreshTokenRequest);

    /**
     * 注册
     *
     * @param userRegisterRequest 用户注册信息
     * @return TokenResponse
     */
    TokenResponse register(UserRegisterRequest userRegisterRequest);

    /**
     * 退出登录
     *
     * @param refreshToken refreshToken
     */
    void logout( String refreshToken);

    /**
     * 查询用户名是否被占用
     *
     * @param username 用户名
     * @return 是：背占用
     */
    Boolean hasUser(String username);

    /**
     * 返回用户的角色与权限信息，使用都好分割，便于spring security创建List<GrantedAuthority>
     * <br/>
     * eg:ROLE_admin,sys:user:add
     * <p>
     * 使用缓存
     *
     * @param userId 用户id
     * @return 角色名称加上前缀ROLE_, 权限名称直接返回，组成用逗号分割的字符串
     */
    List<SimpleGrantedAuthority> getUserAuthorityInfo(Long userId);

    /**
     * 使用用户名获取用户的信息，包含权限信息
     * 实现缓存
     *
     * @param username 用户名
     * @return userDetail
     */
    UserDetailsEntity getUserDetail(String username);
}
